001 /*
002 * Copyright 2005 Stephen McConnell.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
013 * implied.
014 *
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018
019 package net.dpml.util;
020
021 import java.net.URL;
022 import java.io.InputStream;
023 import java.io.ByteArrayInputStream;
024 import java.io.ByteArrayOutputStream;
025 import java.io.FileNotFoundException;
026 import java.util.Properties;
027 import java.util.logging.LogManager;
028
029 import net.dpml.transit.Transit;
030
031 /**
032 * Utility class used to establish the logging configuration.
033 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
034 * @version 1.0.1
035 */
036 public class ConfigurationHandler
037 {
038 static
039 {
040 Object prefs = Transit.DPML_PREFS;
041 }
042
043 /**
044 * Creation of the logging controller.
045 */
046 public ConfigurationHandler()
047 {
048
049 //
050 // customize the configuration based on a properties file declared under
051 // the 'dpml.logging.config' property
052 //
053
054 Properties properties = new Properties();
055 String config = System.getProperty( "dpml.logging.config" );
056 if( null != config )
057 {
058 String spec = PropertyResolver.resolve( config );
059 try
060 {
061 URL url = new URL( spec );
062 InputStream stream = url.openStream();
063 properties.load( stream );
064 PropertyResolver.resolve( properties );
065 }
066 catch( FileNotFoundException e )
067 {
068 final String error =
069 "Logging configuration does not exist."
070 + "\nURI: " + spec;
071 System.err.println( error );
072 }
073 catch( Exception e )
074 {
075 System.out.println( "Error loading user properties: " + config );
076 e.printStackTrace();
077 }
078 }
079
080 //
081 // ensure that sensible defaults exist
082 //
083
084 if( null == properties.getProperty( ".level" ) )
085 {
086 String level = getDefaultLevel();
087 properties.setProperty( ".level", level );
088 }
089
090 if( null == properties.getProperty( "handlers" ) )
091 {
092 setProperty( properties,
093 "handlers",
094 "java.util.logging.ConsoleHandler" );
095 setProperty( properties,
096 "java.util.logging.ConsoleHandler.formatter",
097 "net.dpml.util.StandardFormatter" );
098 setProperty( properties, "java.util.logging.ConsoleHandler.level", "ALL" );
099 }
100
101 //
102 // convert the resolved properties instance to an input stream
103 // and supply this to the log manager
104 //
105
106 try
107 {
108 ByteArrayOutputStream out = new ByteArrayOutputStream();
109 properties.store( out, "DPML Logging Properties" );
110 byte[] bytes = out.toByteArray();
111 ByteArrayInputStream input = new ByteArrayInputStream( bytes );
112 LogManager manager = LogManager.getLogManager();
113 manager.readConfiguration( input );
114 }
115 catch( Throwable e )
116 {
117 e.printStackTrace();
118 }
119 }
120
121 private void setProperty( Properties properties, String key, String value )
122 {
123 properties.setProperty( key, System.getProperty( key, value ) );
124 }
125
126 private String getDefaultLevel()
127 {
128 //if( "true".equals( System.getProperty( "dpml.debug" ) ) )
129 //{
130 // return "FINE";
131 //}
132 //else
133 //{
134 return System.getProperty( "dpml.logging.level", "INFO" ).toUpperCase();
135 //}
136 }
137 }